Paper Review -- How to Fine-Tune BERT for Text Classification

一、摘要

针对BERT在文本分类任务上的应用, 文章对不同的fine-tuning方法进行了详尽的实验, 并给出了BERT进行文本分类任务的fine-tuning策略.

二、结论

  1. 对于文本分类任务BERT的顶层(Top Layer)特征效果最好;

  2. 使用合适的逐层下降学习率, BERT可以克服灾难性遗忘问题;

  3. 对任务内、领域内的数据集进行further pre-training能够有效的提高分类表现;

  4. 多任务fine-tune有利于单任务的fine-tune, 但是效果不如further pre-training;

  5. 对于小样本数据, 使用BERT可以提高模型表现.

三、主要贡献

  • 提出一个通用的Fine-Tuning三步走策略

    step1 对于领域内语料库,或者任务内的训练数据, 可以对BERT进行Further Pre-training, 原因是BERT训练使用的是通用领域语料, 与目标领域的预料分布可能不一样;

    step2 如果有多个类似的任务可用, 可以通过多任务学习对BERT进行fine-tuning[多任务学习不熟];

    step3 对目标任务进行fine-tune, 针对多种Fine-Tuning策略如何选择.

    • Fine-Tuning三步走策略:
  • 调研了以下Fine-Tuning策略, 并给出了针对TextClassification最好的实现方式

    1. preprocess of long text

    BERT的maxlen=512, 对于长文本需要截断处理, head+tail的截取方式表现最好.

    1. layer selection

    BERTbase中包含一层embedding layer, 12层encoder layer, 一层polling layer, 文本分类任务中BERT的最后一层表现最好.

    1. layer-wise learning rate

    为了解决过拟合问题, 比较好的optimizer和一个合适的学习率, 较小的学习率加上学习率衰减表现会更好, [lower learning rate to the lower layer 没理解lower layer, 从衰减的角度来看, lower layer的lr是最大的]

    1. catastrophic forgetting

    较低的学习率能够使BERT克服灾难性遗忘
    5) low-shot learning problems

    任务内Pretraining+Fine Tuning 效果好于直接Fine Tuning

  • Further Pre-training

    由于通用开放领域与具体的目标领域的数据分布不完全相同,对任务内、领域内或者交叉领域内的语料数据进行pre-training, 能够提高下游任务的效果, 其中领域内数据集pre-training的表现效果更好.

    1. Within-Task Training Data

    使用任务内的训练集进行pre-training, 训练步数(training steps)对下游任务影响较大, 过大可能导致灾难性遗忘, 过小达不到pre-train效果.

    1. In-Domain and Cross-Domain Data

    从实验结果来看, 领域内pre-training的效果最好.

  • Multi-task Fine Tuning
    介绍的不是很清楚, 从实验结果来看, 相对于单纯BERT Fine-tuning效果有所提高, 另外如果加上交叉领域的Pre-traing后, Multi-task fine tuning就没有必要了, 原因交叉领域的Pre-trianing之后, 就已经包含了多领域内的信息了.

四、Hyperparameters选择

  • Further Pretraining
1
2
3
4
5
6
7
{
"batch_size": 32,
"max_seq_len": 128,
"learning_reate": 5e-5,
"train_steps": 100 * 1000,
"warm_up_steps": 10 * 1000
}
  • Fine-tune
1
2
3
4
5
6
7
8
9
10
{
"batch_size": 24,
"dropout_prob": .1,
"adam_beta1": 0.9,
"adam_beta2": 0.999,
"learning_rate_scchrduler": "slanted triangular",
"learning_rate": 2e-5,
"warm_up_prop": 0.1,
"epochs": 4
}

参考文献

[1] How to Fine-Tune BERT for Text Classification?

[2] BERT 在文本分类任务中的最佳实践

[3] BERT4doc-Classification

[4]【CCL-2019】How to Fine-Tune BERT for Text Classification?